#include "widget.h"
#include "ui_widget.h"

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    my_lineEdit = new myLineEdit(this);
    my_lineEdit->move(100, 100);
    // 为其他子节点安装事件过滤器
    my_lineEdit->installEventFilter(this); // 安装父节点的事件过滤器
}

Widget::~Widget()
{
    delete ui;
}

// keyPressEvent优先级较低
void Widget::keyPressEvent(QKeyEvent *event)
{
    qDebug() << "QWidget key press event!"; // 默认是不会有效果的

}

// 优先级最高的是eventFilter

bool Widget::eventFilter(QObject *watch, QEvent *event)
{
    // 先判断操作的对象
    if (watch == my_lineEdit) {
        if (event->type() == QEvent::KeyPress) {
            qDebug() << "Widget eventFilter catch line_edit!";
            // 如果return false还是会抛给父节点处理
            return false;
        }
    }
    // 如果是其他事件，就不管了，直接返回基类的事件过滤器
    return QWidget::eventFilter(watch, event);
}

